﻿using System;
using Acaweb.Data.Contracts;
using Acaweb.Model.Entities;
using Acaweb.Model.Entities.DatosCompuestos;
using Acaweb.Componentes.Contracts;
using System.Collections.Generic;
using System.Linq;

namespace Acaweb.Componentes
{
    public class DocumentosPendientesService : BaseService, IDocumentosPendientesService
    {
        IDocumentosPendientesDao _DocumentosPendientesDao;
        IDocumentosEntregadosDao _DocumentosEntregadosDao;
        IEstudiantesDao _EstudiantesDao;

        public IEstudiantesDao EstudiantesDao
        {
            get { return _EstudiantesDao; }
            set { _EstudiantesDao = value; }
        }

        public IDocumentosEntregadosDao DocumentosEntregadosDao
        {
            get { return _DocumentosEntregadosDao; }
            set { _DocumentosEntregadosDao = value; }
        }

        public IDocumentosPendientesDao DocumentosPendientesDao
        {
            get { return _DocumentosPendientesDao; }
            set { _DocumentosPendientesDao = value; }
        }

        public IList<DocumentosPendientes> GetByTipoPrograma(TipoPrograma TipoPrograma)
        {
            return DocumentosPendientesDao.GetByTipoPrograma(TipoPrograma);
        }

        public DocumentosPendientes GetById(string Id)
        {
            return DocumentosPendientesDao.GetById(Id);
        }

        public IList<DocumentosPendientes> GetDocumentosPendientes(int CodigoEstudiante)
        {
            List<DocumentosPendientes> DocumentosPendientes = new List<DocumentosPendientes>();
            TipoPrograma TipoPrograma = EstudiantesDao.GetByCodigoEstudiante(CodigoEstudiante).PlanEstudio.TipoPrograma;

            IList<DocumentosPendientes> ListaDocumentos = DocumentosPendientesDao.GetByTipoPrograma(TipoPrograma);

            object O = DocumentosEntregadosDao.GetById(CodigoEstudiante);

            List<string> DocumentosEntregados = DocumentosEntregadosDao.GetById(CodigoEstudiante).GetListaDocumentos();

            foreach (DocumentosPendientes Documento in ListaDocumentos)
            {
                if (!DocumentosEntregados.Contains(Documento.Descripcion))
                    DocumentosPendientes.Add(Documento);
            }

            return DocumentosPendientes;
        }
    }
}